home *** CD-ROM | disk | FTP | other *** search
- (define (file-length x)
- (let ((a (open-input-file x))
- (b nil))
- (set-file-position! a 0 2)
- (set! b (get-file-position a))
- (close-port a)
- b))
-
- (define (open-binary-input-file x) (open-port x "rb" 1))
-
- (define (open-binary-output-file x) (open-port x "wb" 1))
-
- (define (open-input-file x) (open-port x "r" 1))
-
- (define (open-output-file x) (open-port x "w" 1))
-
- (define (open-extend-file x) (open-port x "a" 1))
-
- (define (current-input-port) (fluid input-port))
-
- (define (current-output-port) (fluid output-port))
-
- (define (newline . x) (display #\newline (car x)))
-
- (define (page . x) (display #\page (car x)))
-
- (define (call-with-input-file x y)
- (let* ((in (open-input-file x))
- (res (y in)))
- (close-input-port in)
- res))
-
- (define (call-with-output-file x y)
- (let* ((in (open-output-file x))
- (res (y in)))
- (close-output-port in)
- res))
-
- (define (with-input-from-file x y)
- (letrec ((old-in (fluid input-port))
- (new-in (open-port x "r" -1))
- (p (lambda () (close-input-port new-in)
- (set! (fluid input-port) old-in)))
- (res nil))
- (set! (fluid input-port) new-in)
- (call-on-reset p)
- (set! res (y))
- (close-input-port (fluid input-port))
- (set! (fluid input-port) old-in)
- (uncall-on-reset p)
- res))
-
- (define (with-output-to-file x y)
- (letrec ((old-out (fluid output-port))
- (new-out (open-port x "w" -1))
- (p (lambda () (close-output-port new-out)
- (set! (fluid output-port) old-out)))
- (res nil))
- (set! (fluid output-port) new-out)
- (call-on-reset p)
- (set! res (y))
- (close-output-port (fluid output-port))
- (set! (fluid output-port) old-out)
- (uncall-on-reset p)
- res))
-
-